// Copyright 2019 Google LLC.
#ifndef FontArguments_DEFINED
#define FontArguments_DEFINED

#include <functional>
#include <vector>
#include "include/core/SkFontArguments.h"
#include "include/core/SkTypeface.h"

namespace skia {
namespace textlayout {
class FontArguments {
public:
    FontArguments(const SkFontArguments &);
    FontArguments(const FontArguments &) = default;
    FontArguments(FontArguments &&) = default;

    FontArguments &operator = (const FontArguments &) = default;
    FontArguments &operator = (FontArguments &&) = default;

    sk_sp<SkTypeface> CloneTypeface(const sk_sp<SkTypeface> &typeface) const;

    friend bool operator == (const FontArguments &a, const FontArguments &b);
    friend bool operator != (const FontArguments &a, const FontArguments &b);
    friend struct std::hash<FontArguments>;

private:
    FontArguments() = delete;

    int fCollectionIndex;
    std::vector<SkFontArguments::VariationPosition::Coordinate> fCoordinates;
    int fPaletteIndex;
    std::vector<SkFontArguments::Palette::Override> fPaletteOverrides;
};
} // namespace textlayout
} // namespace skia

namespace std {
template <> struct hash<skia::textlayout::FontArguments> {
    size_t operator () (const skia::textlayout::FontArguments &args) const;
};
}

#endif // FontArguments_DEFINED
